package com.tinfeng.uplevel;

public class JavaGeneric {
    // 泛型
    /**
     * 增加泛型可：
     * 可以减少类型转换的次数，代码更加简洁；
     * 程序更加健壮：只要编译期没有警告，运行期就不会抛出ClassCastException异常；
     * 提高了代码的可读性：编写集合的时候，就限定了集合中能存放的类型。
     */

    // 无限定通配符
    // 想要解决这个问题，使用类型通配符即可，修改方法参数处的代码，将<>中间的Object改为?即可：
    // public void printListElement(List<?> list) {
    // 传String new一个  传int new一个

    // extends 通配符
    // extends通配符用来限定泛型的上限。什么意思呢？依旧以上面的实例为例，我们来看一个新的需求，我们希望方法接收的List 集合限定在数值类型内（float、integer、double、byte 等），不希望其他类型可以传入（比如字符串）。此时，可以改写上面的方法定义，设定上界通配符：
    // public void printListElement(List<? extends Number> list) {
    //  这样的写法的含义为：List集合装载的元素只能是Number自身或其子类（Number类型是所有数值类型的父类）

    // super 通配符
    // 既然已经了解了如何设定通配符上界，也就不难理解通配符的下界了，可以限定传递的参数只能是某个类型的父类。

    // <? super Type>
}
